TITL DAI FIRMWARE CD8B-CF01 V1.1 ORG :CD8B * * * ***************************************** * POINTERS TO STRINGS OF BASIC COMMANDS * ***************************************** * * This table, with base at CC08, is used for * printing the Basic instructions during a * listing. * * From the TOKEN, the address in this table can * be found by: * CC08 + 3x TOKEN = address in table * This is done by a routine on 0ECCC. * * The address given points to the memory location * on which the particular string can be found. * * The data byte after the address is an offset * with base at 0ECF8. Therewith the instructions * can be found about what to print after the * Basic statement (when performing LIST). * CDTAB DBL :CBBF NEW DATA :00 * DBL :CBC6 CONT DATA :00 * DBL :CBCE STOP DATA :00 * DBL :CBD6 END DATA :00 * DBL :CBDD RESTORE DATA :00 * DBL :CBE8 RETURN DATA :00 * DBL :CBF2 RUN DATA :00 * DBL :CBF2 RUN DATA :01 * DBL :CBF9 GOTO DATA :01 * DBL :CC01 GOSUB DATA :01 * DBL :CD1B LOAD DATA :04 * DBL :CD23 SAVE DATA :04 * DBL :CD2B CHECK DATA :00 * DBL :CC23 OUT DATA :05 * DBL :CC2A POKE DATA :05 * DBL :CC32 WAIT DATA :0A * DBL :CD78 WAIT MEM DATA :0A * DBL :CD81 WAIT TIME DATA :04 * DBL :CC3A LIST DATA :00 * DBL :CC3A LIST DATA :01 * DBL :CC3A LIST DATA :0B * DBL :CC4A SOUND DATA :0C * DBL :CC53 NOISE DATA :0D * DBL :CC5C ENVELOPE DATA :0E * DBL :CC68 CURSOR DATA :05 * DBL :CC72 MODE DATA :0F * DBL :CC7A DOT DATA :07 * DBL :CC81 DRAW DATA :08 * DBL :CC89 FILL DATA :08 * DBL :CC91 COLORT DATA :09 * DBL :CC9B COLORG DATA :09 * DBL :CCA5 INPUT DATA :11 * DBL :CCA5 INPUT DATA :10 * DBL :CCAE DATA DATA :03 * DBL :CCB6 READ DATA :11 * DBL :CCBE LET DATA :13 * DBL :0000 Assignment (= LET) DATA :13 * DBL :CCC5 IF DATA :14 * DBL :CCC5 IF DATA :15 * DBL :CCC5 IF DATA :16 * DBL :CCCB REM DATA :03 * DBL :CCD2 FOR DATA :17 * DBL :CCD9 NEXT DATA :00 * DBL :CCD9 NEXT DATA :18 * DBL :CCE1 PRINT DATA :19 * DBL :CCEF ON DATA :1A * DBL :CCEF ON DATA :1B * DBL :CCF5 DIM DATA :11 * DBL :CCFC '***' DATA :03 * DBL :CD03 UT DATA :00 * DBL :CD09 CALLM DATA :1C * DBL :CD12 CLEAR DATA :04 * DBL :0000 IMP DATA :00 * DBL :CC3A LIST DATA :00 * DBL :CC3A LIST DATA :01 * DBL :CC3A LIST DATA :0B * DBL :CC11 SAVEA DATA :1E * DBL :CC1A LOADA DATA :1E * DBL :CD56 TALK DATA :04 * DBL :CD3D STEP DATA :00 * DBL :CD45 TRON DATA :00 * DBL :CD4D TROFF DATA :00 * ***************************** * part of Run 'TALK' (CD6D) * ***************************** * * Set frequencies of channels 0,1 or 2. * RTK60 MOV E,A Code in E (=lobyte REM osc. addr) MVI D,:FC MOV A,M Get 1st byte freq.code STAX D into osc. INX H MOV A,M Get 2nd byte freq.code STAX D into osc. JMP :EA47 (0) Handle next code * DATA :FF * **************************** * GET (M+1) IN E, ZERO M+1 * **************************** * * Part of EARRAY (CB5B). * * Entry: HL points to M. * Exit: HL points to M+1. (M+1) in E. * AFBCD preserved. * MPT09 INX H MOV E,M MVI M,:00 RET * *************** * STRING DATA * *************** * MSPACE DATA :05 DATA :53 S DATA :50 P DATA :41 A DATA :43 C DATA :45 E * *************************** * part of RUN DIM (0E639) * *************************** * MPT41 DCX H JMP :CB5B Erase array if exists * ********************************** * GET TABNUMBER IN L, DOUTC IN A * ********************************** * * Part of Run 'TAB'. * MPT50 CALL :E71D (0) Get nr of tabs in A MOV L,A save it in L LDA :0131 Get output direction RET * **************************************** * PRINT EXPRESSION FOLLOWED BY A SPACE * **************************************** * * Entry SCHSP frequently used to print a space. * LC230 CALL :EEA2 (0) Print expression SCHSP MVI A,:20 JMP :DD60 Print space * ************* * PRINT ',' * ************* * * Entry: None. * Exit: FBCDEHL preserved. * SCHCO MVI A,:2C JMP :DD60 Print ',' * ********************************* * PRINT A STRING BETWEEN SPACES * ********************************* * * Entry: Pointer to stringpointer on stack. * Exit: BC preserved. AFDEHL corrupted. * STXSS CALL :CE6B Print space STXTS XTHL Get stringpntr from stack MOV E,M ) Store addr string in DE INX H ) MOV D,M ) INX H ) XTHL Addr after pntr on stack XCHG Addr string in HL CALL :DB32 Print string pointed by HL JMP :CE6B Print space * ***************************** * EDIT: PRINT TEXT COMPLETE * ***************************** * LC216 CALL :EF17 (2) Print text complete JMP :E138 (2) Popall, ret * ******************************** * LIST ARRAY NAME - (not used) * ******************************** * LC217 PUSH D CALL :EEF7 (0) List array name POP D RET * **************** * part of C6BA * **************** * LC196 PUSH H JMP :E92D (2) Now set up screen bits REM for mode 1 * ************** * (not used) * ************** * LC218 LDA :00A2 Get startaddr edit buffer JMP :E97C (0) * *************************** * CONVERT MACC FOR OUTPUT * *************************** * * The MACC contents is converted from FPT to ASCII. * * Exit: AF corrupted, BCDEHL preserved. * FBCP CALL :C021 Convert FPT nr for output PUSH B MVI B,:01 Cannot trim last dec.place JMP :DB65 Tidy up into external form * ********************* * LIST CURRENT LINE * ********************* * * Lists a program line if trace flag set. * Part of CBF5. * MPT06 DCX B CALL :DD55 Cursor to begin next line JMP :ECAB (0) List current line * LC219 POP D (Not used) RET * ************************ * part of SMKRM (CA01) * ************************ * MPT07 POP D Return, CY=1 POP PSW STC RET * MPT08 POP PSW Return, CY=0 STC CMC RET * ********************** * CHANGE SCREEN MODE * ********************** * * Part of Run 'MODE' (0E5BB). * * Entry: New mode in A. * MPT40 RST 5 Change mode DATA :18 JC :DA10 If insufficient memory: REM error 'OUT OF MEMORY'. RET * ***************************** * part of RUN CLEAR (0E6B5) * ***************************** * * Checks if more than 4 bytes are cleared. * * Entry: HL: Number of bytes to be cleared. * F : flags on hibyte HL. * MPT43 SHLD :0100 ] Update pntr CALL :E401 ] Run RESTORE PUSH D ] Preserve difference JMP :D87F ] * CALL :C00C ] FPT compare nrs in MACC REM and in WORKE LXI H,:D0F1 ] Addr FPT (-1) RZ ] Ready if nr = 0 RST 4 ] Add (-1) to MACC if nr <0 DATA :00 ] RET ] * ************************************* * RE-ORGANISE SCREEN AFTER 'DAI-PC' * ************************************* * * Lines after 'DAI PERSONAL COMPUTER' are set in * unit colour mode. * Set line mode byte to 7F and first char. * byte to 20, colour 00 during screen init. * * Entry: HL line mode byte of part. line. * MPT04 MVI M,:7F Wide char line contr byte DCX H DCX H MVI M,:20 Load space DCX H MVI M,:00 Colour no change DCX H RET * **************************************** * part of RUN 'WAIT(TIME)' (DFD5/DFF7) * **************************************** * REX1D DCX B JMP :E71D (0) Get value of argument REM in A (max. FF) * ******************************************** * EVALUATE ARGUMENTS IN NUMERIC EXPRESSION * ******************************************** * * Not used. * LC231 PUSH PSW CALL :E819 (0) Evaluate arguments POP PSW RET * ************************************ * SELECT ROM BANK 0; PRINT MESSAGE * ************************************ * * When CEE4 is called, the 2 bytes following * the CALL-instruction indicate the message to * be printed by the routine DAFF. * SELB0 LDA :0040 Get POROM ANI :3F Select ROM bank 0 STA :0040 Set POROM STA :FD06 and PORO JMP :DAFF Print message * **************************************** * EDIT: RETURN FROM 'DELETE CHARACTER' * **************************************** * * Part of 2EFCC. * LC232 POP H CALL :E330 (2) Put cursor on screen JMP :EF95 (2) Popall, ret, Cy=1 * ***************************************** * PRINT 'COMPUTER' UNDER 'DAI PERSONAL' * ***************************************** * * Part of RESET (C751). * During screen initialisation used to set a * new line mode byte between both parts of the * message. Line colour bytes are set for medium * resolution. * * Entry: HL: line mode byte to be changed. * DE: offset for calculation next * line mode byte. * Exit: HL: next line mode byte. * MPT03 MVI M,:5F Set line mode byte DCX H MVI M,:40 Set line colour byte INX H DAD D Addr. next line mode byte RET * DATA :FF * * * END